/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Gestores.DtoObjects;
import Gestores.DaoInterfaces.BitacoraDAO;
import java.sql.Date;
import java.util.ArrayList;
import Gestores.DataBaseLink;
import Gestores.Entidades.EntidadBitacora;
import Gestores.NucleoBaseDatos;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 *
 * @author radxt
 */
public class BitacoraDTO implements BitacoraDAO {
    
    private DataBaseLink gestor;

    public BitacoraDTO() {
        this.gestor = NucleoBaseDatos.getInstance();
    }
   
    @Override
    public ArrayList<Object> buscarPorFechaFecha(Date fechaInicio, Date fechaFin) throws Exception {
       ResultSet resultado = gestor.executeSql(
                        "Call BuscarBitacoraPorFechaFecha('" + fechaInicio.toString() + "','" + fechaFin.toString() + "');");
       return this.devolverListaCargada(resultado);
    }

    @Override
    public ArrayList<Object> buscarPorDia(Date fecha) throws Exception {
        ResultSet resultado = gestor.executeSql(
                "Call BuscarBitacoraPorDia('" + fecha.toString() + "');");
        return devolverListaCargada(resultado);
    }

    @Override
    public ArrayList<Object> buscarPorAccion(String accion) throws Exception{
        ResultSet resultado = gestor.executeSql("Call BuscarBitacoraPorAccion('" + accion + "'):");
        return devolverListaCargada(resultado);
    }

    @Override
    public ArrayList<Object> buscarPorUsuario(int id) throws Exception{
        ResultSet resultado = gestor.executeSql("Call BuscarBitacoraPorUsuario(" + id + ");");
        return devolverListaCargada(resultado);
    }

    @Override
    public ArrayList<Object> buscarPorAccionYUsuario(int id, String accion) throws Exception{
        ResultSet resultado = gestor.executeSql("Call BuscarBitacoraPorAccionyUsuario(" + id + ",'" + accion + "');");
        return devolverListaCargada(resultado);
    }

    @Override
    public ArrayList<Object> buscarPorTablaYUsuario(int id, String tabla) throws Exception{
        ResultSet resultado = gestor.executeSql("Call BuscarBitacoraPorTablayUsuario(" + id + ",'" + tabla + "');");
        return devolverListaCargada(resultado);
    }

    @Override
    public ArrayList<Object> buscarPorUsuarioYFecha(int id, Date fecha) throws Exception{
        ResultSet resultado = gestor.executeSql("Call BuscarBitacoraPorUsuarioyFecha(" + id + ",'" + fecha + "');");
        return devolverListaCargada(resultado);
    }

    @Override
    public void insertar(Object objeto) throws Exception {
         EntidadBitacora eBitacora = (EntidadBitacora) objeto;
        gestor.executeSql("Call RegistrarEnBitacora(" + eBitacora.cadenaParaInsercion() + ");");
    }

    @Override
    public void actualizar(Object primaryKey, Object objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void eliminacionLogica(Object objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void eliminacionFisica(Object objeto) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public ArrayList<Object> listarTabla() throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
        private ArrayList<Object> devolverListaCargada(ResultSet resultado) throws SQLException {
        ArrayList<Object> lista = new ArrayList<Object>();
        while (resultado.next()) {
            EntidadBitacora eBitacora = new EntidadBitacora(
                    resultado.getString(1),
                    resultado.getDate(2),
                    resultado.getTime(3),
                    resultado.getString(4)
                    );
            lista.add(eBitacora);
        }
        // APOR HACER
        return lista;
    }
    
}
